#ifndef PROGRESSTIP_H
#define PROGRESSTIP_H

/**
 * 1:可设置最小值，最大值，范围值，当前值
 * 2:可设置是否显示百分比
 * 3:可设置边距，留出空袭防止tip在外面
 * 4:可设置进度的颜色，渐变画刷
 * 5:可设置背景色，文字颜色，提示背景
 * 6:可设置原角度
 * 7:如果设置了进度画刷，则提示背景也该采用此画刷
 */

#include <QWidget>

class ProgressTip : public QWidget
{
    Q_OBJECT

    Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
    Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
    Q_PROPERTY(double value READ getValue WRITE setValue)

    Q_PROPERTY(bool percent READ getPercent WRITE setPercent)
    Q_PROPERTY(int padding READ getPadding WRITE setPadding)
    Q_PROPERTY(int radius READ getRadius WRITE setRadius)

    Q_PROPERTY(QBrush valueBrush READ getValueBrush WRITE setValueBrush)
    Q_PROPERTY(QColor valueColor READ getValueColor WRITE setValueColor)
    Q_PROPERTY(QColor bgColor READ getBgColor WRITE setBgColor)
    Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
    Q_PROPERTY(QColor tipColor READ getTipColor WRITE setTipColor)

public:
    explicit ProgressTip(QWidget *parent = nullptr);

protected:
    void paintEvent(QPaintEvent *);
    void drawBg(QPainter *);
    void drawTip(QPainter *);
    void drawValue(QPainter *);

private:
    double minValue;        //最小值
    double maxValue;        //最大值
    double value;           //当前值

    bool percent;           //是否显示百分比

    int padding;            //边距
    int radius;             //圆角

    QBrush valueBrush;      //进度画刷
    QColor valueColor;      //进度颜色
    QColor bgColor;         //背景颜色
    QColor textColor;       //文本颜色
    QColor tipColor;        //tip背景颜色

public:
    double getMinValue()    const;
    double getMaxValue()    const;
    double getValue()       const;

    bool getPercent()       const;
    int getPadding()        const;
    int getRadius()         const;

    QBrush getValueBrush()  const;
    QColor getValueColor()  const;
    QColor getBgColor()     const;
    QColor getTextColor()   const;
    QColor getTipColor()    const;

    QSize sizeHint()        const;
    QSize minimumSizeHint() const;

public slots:
    //设置范围值
    void setRange(double minValue,double maxValue);
    void setRange(int minValue,int maxValue);

    //设置最大值和最小值
    void setMinValue(const double &minValue);
    void setMaxValue(const double &maxValue);

    //设置目标值
    void setValue(double value);
    void setValue(int value);

    //设置百分比显示/边距/圆角
    void setPercent(const bool &percent);
    void setPadding(const int &padding);
    void setRadius(const int &radius);

    //设置进度画刷/进度颜色/背景色/文本色/提示背景色
    void setValueBrush(const QBrush &valueBrush);
    void setValueColor(const QColor &valueColor);
    void setBgColor(const QColor &bgColor);
    void setTextColor(const QColor &textColor);
    void setTipColor(const QColor &tipColor);

signals:
    void valueChanged(double value);
};

#endif // IPADDRESS_H
